#include <asl_core.h>
#include <asl_module.h>
#include <mod_json.h>
#include <lib_json.h>

MOD_ENT_FUNC_ARG_DEF(json, json_encode) = {
        MOD_ENT_FUNC_ARG_BODY("val", LEN("val"), value_type_string, 1, NULL),
        MOD_ENT_FUNC_EMPTY_ARG_BODY
};

MOD_ENT_FUNC_ARG_DEF(json, json_decode) = {
        MOD_ENT_FUNC_ARG_BODY("val", LEN("val"), value_type_string, 1, NULL),
        MOD_ENT_FUNC_EMPTY_ARG_BODY
};

MOD_ENT_FUNCS_DEF(json) = {
        MOD_ENT_FUNC_BODY("json_encode", MOD_ENT_FUNC_ARG_NAME(json, json_encode), MOD_FUNC_NAME(json_encode)),
        MOD_ENT_FUNC_BODY("json_decode", MOD_ENT_FUNC_ARG_NAME(json, json_decode), MOD_FUNC_NAME(json_decode)),
        MOD_ENT_FUNC_BODY("get_json_version", NULL, MOD_FUNC_NAME(get_json_version)),
        MOD_ENT_EMPTY_FUNC_BODY,
};

MOD_MOD_BODY(json);

MOD_INIT_FUNC_DEF(json) {
    return RET_SUCCESS;
}

MOD_SHUTDOWN_FUNC_DEF(json) {
    return RET_SUCCESS;
}

MOD_FUNC_DEF(get_json_version) {

    return NULL;
}

MOD_FUNC_DEF(json_decode) {
    value_t *val;
    json_task_t *jt;
    jt = (json_task_t *) memory_alloc(sizeof(json_task_t));
    val = (value_t *) hash_find(var_table, "val", strlen("val"));
    jt->str = val->u.str.val;
    jt->len = val->u.str.len;
    json_parser(jt);
    return value_create_resource(jt);
}

MOD_FUNC_DEF(json_encode) {
    value_t *val;
    val = (value_t *) hash_find(var_table, "val", strlen("val"));

}